import 'package:flutter/material.dart';
import 'package:flutter_common_utils/flutter_common_utils.dart';
import 'package:get/get.dart';
import '../base_core_config.dart';
import '../route/router_observer.dart';
import 'base_widget_state.dart';

//基础的BasePage 方便管理StatefulWidget
abstract class BasePage extends BaseWidget {
  const BasePage({super.key});
}

abstract class BaseState<T extends BasePage> extends BaseWidgetState<T> {
  final title = "".obs;
  dynamic arguments;
  Route<dynamic>? route;

  String get routeName => route?.settings.name ?? "";

  String get pageName => '$routeName,${widget.runtimeType.toString()},${title.value}';

  @override
  void initState() {
    route = routeRecord.curRoute;
    arguments = arguments ?? (Get.arguments ?? {});
    super.initState();
    LogUtils.i("创建:$pageName 界面");
  }

  //这里如果子类实现了其他混入，会导致这个方法无法调用 使用callBuild逻辑替换
  //这里就不能调用super.build(context);
  @mustCallSuper
  @override
  Widget build(BuildContext context) {
    return callBuild(context);
  }

  //方便 外界使用Mix混入需要调用 build的时候
  @mustCallSuper
  Widget callBuild(BuildContext context) {
    // 确保调用了 AutomaticKeepAliveClientMixin 的 build 方法
    super.build(context);
    // 继续构建你的 UI
    return createMainWidget(context); // 调用父类的 build 方法
  }

  Color backgroundColor(BuildContext context) => context.theme.colorScheme.surface;

  // AppBar + Content
  Widget createMainWidget(BuildContext context) {
    LogUtils.i("页面：${title.value}，，$runtimeType 调用了 build");
    return BaseCoreConfig.createMainWidgetRoot(this, context);
  }

  // @protected
  // PreferredSizeWidget? createAppbar() => AppBar(
  //       title: appBarTitle(title),
  //       centerTitle: true,
  //       backgroundColor: AppColors.white,
  //     );
  PreferredSizeWidget? createAppbar() {
    return BaseCoreConfig.createAppbar(this, context);
  }

  //不同部分UI处理，在子类必须实现buildWidget()函数
  Widget buildWidget(BuildContext context);

  //悬浮按钮
  Widget? floatingActionButton() {
    return null;
  }

  //输入法弹出时，页面不要缩放
  bool? resizeToAvoidBottomInset;

  //将主体延伸到AppBar后面
  bool extendBodyBehindAppBar = false;

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    LogUtils.i("didChangeDependencies: $pageName 界面");
  }

  @override
  void didUpdateWidget(covariant T oldWidget) {
    super.didUpdateWidget(oldWidget);
    LogUtils.i("didUpdateWidget: $pageName 界面");
  }

  @override
  void deactivate() {
    super.deactivate();
    LogUtils.i("停用:$pageName 界面");
  }

  @override
  void dispose() {
    super.dispose();
    LogUtils.i("销毁$pageName 界面");
  }
}
